package com.ym.web.utils;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExcelUtil {
    /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param wb HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String []title, String [][]values, HSSFWorkbook wb){

        // 第一步，创建一个HSSFWorkbook，对应一个Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }
        // 第二步，在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);
        // 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(2);
        // 第四步，创建单元格，并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

        HSSFFont font = wb.createFont();
        font.setFontName("宋体");
        font.setFontHeightInPoints((short) 18);//设置字体大小
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
        style.setFont(font);

        HSSFRow row0 = sheet.createRow(0);
        HSSFCell cell2 = row0.createCell(0);
        cell2.setCellStyle(style);
        cell2.setCellValue(sheetName);

        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 6));

        //声明列对象
        HSSFCell cell = null;



        //创建标题
        for(int i=0;i<title.length;i++){
            sheet.autoSizeColumn((short)i);

            HSSFCellStyle style0 = wb.createCellStyle();
            style0.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格
            style0.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            style0.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
            style0.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
            style0.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
            style0.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

            HSSFFont font0 = wb.createFont();
            font0.setFontName("宋体");
            font0.setFontHeightInPoints((short) 12);//设置字体大小
            font0.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
            style0.setFont(font0);

            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style0);
        }

        //创建内容
        for(int i=0;i<values.length;i++){
            row = sheet.createRow(i + 3);
            for(int j=0;j<values[i].length;j++){
                sheet.autoSizeColumn((short)j);

                //将内容按顺序赋给对应的列对象
                HSSFCell cell1 = row.createCell(j);
                HSSFCellStyle style1 = wb.createCellStyle();
                HSSFFont font1 = wb.createFont();
                font1.setFontName("宋体");
                font1.setFontHeightInPoints((short) 12);
                style1.setFont(font1);
                style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格
                style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                style1.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                style1.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                style1.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                style1.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

                if(i<3||i>=values.length-3){
                    HSSFCellStyle style2 = wb.createCellStyle();
                    HSSFFont font2 = wb.createFont();
                    font2.setFontName("宋体");
                    font2.setFontHeightInPoints((short) 12);
                    font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示

                    if(i<3){
                        font2.setColor(HSSFColor.RED.index);
                    }
                    if(i>=values.length-3){
                        font2.setColor(HSSFColor.GREEN.index);
                    }
                    style2.setFont(font2);
                    style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格
                    style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                    style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                    style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                    style2.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                    style2.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
                    cell1.setCellValue(values[i][j]);
                    cell1.setCellStyle(style2);
                }else{
                    cell1.setCellValue(values[i][j]);
                    cell1.setCellStyle(style1);
                }


            }
        }

        for(int i=0;i<title.length;i++){
            sheet.autoSizeColumn((short)i);
        }
        return wb;
    }

}
